let fs = require('fs');
let path = require('path');
let archiver = require('archiver');

/**
 * 压缩目录并清理
 * @param {string} directoryPath - 目标目录路径
 */
async function compressAndCleanDirectory(directoryPath) {
  try {
    // 1. 检查目录是否存在
    if (!fs.existsSync(directoryPath)) {
      console.error(`目录 ${directoryPath} 不存在`);
      return;
    }

    // 获取目录名称和上级目录路径
    let directoryName = path.basename(directoryPath);
    let parentDirectory = path.dirname(directoryPath);
    let zipFilePath = path.join(parentDirectory, `${directoryName}.zip`);

    // 2. 创建 ZIP 文件
    let output = fs.createWriteStream(zipFilePath);
    let archive = archiver('zip', {
      zlib: { level: 9 }, // 设置压缩级别
    });

    output.on('close', () => {
      console.log(`ZIP 文件已创建，大小：${archive.pointer()} 字节`);
    });

    archive.on('error', (err) => {
      throw err;
    });

    archive.pipe(output);

    // 将目录中的所有文件添加到 ZIP 中
    archive.directory(directoryPath, false);

    // 完成压缩
    await archive.finalize();

    // 3. 删除目录中的文件
    let deleteFiles = (dir) => {
      let items = fs.readdirSync(dir);
      for (let item of items) {
        let itemPath = path.join(dir, item);
        let stat = fs.statSync(itemPath);
        if (stat.isDirectory()) {
          deleteFiles(itemPath); // 递归删除子目录
          fs.rmdirSync(itemPath); // 删除空目录
        } else {
          fs.unlinkSync(itemPath); // 删除文件
        }
      }
    };

    deleteFiles(directoryPath);

    // 4. 删除空目录
    fs.rmdirSync(directoryPath);

    console.log(`目录 ${directoryPath} 已压缩并清理`);
  } catch (err) {
    console.error('操作失败:', err);
  }
}

/**
 * 处理总入口目录
 * @param {string} rootDirectory - 总入口目录路径
 */
async function processRootDirectory(rootDirectory) {
  try {
    // 检查总入口目录是否存在
    if (!fs.existsSync(rootDirectory)) {
      console.error(`总入口目录 ${rootDirectory} 不存在`);
      return;
    }

    // 读取总入口目录下的所有子目录
    let items = fs.readdirSync(rootDirectory, { withFileTypes: true });
    for (let item of items) {
      if (item.isDirectory()) {
        let subDirectoryPath = path.join(rootDirectory, item.name);
        console.log(`正在处理子目录: ${subDirectoryPath}`);
        await compressAndCleanDirectory(subDirectoryPath);
      }
    }

    console.log('所有子目录已处理完成');
  } catch (err) {
    console.error('处理总入口目录失败:', err);
  }
}

// 使用示例
let rootDirectory = 'D:\\360安全浏览器下载\\新建文件夹'; // 替换为你的总入口目录路径
processRootDirectory(rootDirectory);
